import { extname } from 'path';

const binaryExtensions = new Set([
  // types originally from https://github.com/sindresorhus/binary-extensions/blob/40e44b510d87a63dcf42300bc8fbcb105f45a61c/binary-extensions.json
  '.3dm',
  '.3ds',
  '.3g2',
  '.3gp',
  '.7z',
  '.a',
  '.aac',
  '.adp',
  '.ai',
  '.aif',
  '.aiff',
  '.als',
  '.alz',
  '.ape',
  '.apk',
  '.appimage',
  '.ar',
  '.arj',
  '.asf',
  '.au',
  '.avi',
  '.bak',
  '.baml',
  '.bh',
  '.bin',
  '.bk',
  '.bmp',
  '.btif',
  '.bz2',
  '.bzip2',
  '.cab',
  '.caf',
  '.cgm',
  '.class',
  '.cmx',
  '.cpio',
  '.cr2',
  '.cur',
  '.dat',
  '.dcm',
  '.deb',
  '.dex',
  '.djvu',
  '.dll',
  '.dmg',
  '.dng',
  '.doc',
  '.docm',
  '.docx',
  '.dot',
  '.dotm',
  '.dra',
  '.DS_Store',
  '.dsk',
  '.dts',
  '.dtshd',
  '.dvb',
  '.dwg',
  '.dxf',
  '.ecelp4800',
  '.ecelp7470',
  '.ecelp9600',
  '.egg',
  '.eol',
  '.eot',
  '.epub',
  '.exe',
  '.f4v',
  '.fbs',
  '.fh',
  '.fla',
  '.flac',
  '.flatpak',
  '.fli',
  '.flv',
  '.fpx',
  '.fst',
  '.fvt',
  '.g3',
  '.gh',
  '.gif',
  '.glb',
  '.graffle',
  '.gz',
  '.gzip',
  '.h261',
  '.h263',
  '.h264',
  '.icns',
  '.ico',
  '.ief',
  '.img',
  '.ipa',
  '.iso',
  '.jar',
  '.jpeg',
  '.jpg',
  '.jpgv',
  '.jpm',
  '.jxr',
  '.key',
  '.keystore',
  '.ktx',
  '.lha',
  '.lib',
  '.lvp',
  '.lz',
  '.lzh',
  '.lzma',
  '.lzo',
  '.m3u',
  '.m4a',
  '.m4v',
  '.mar',
  '.mdi',
  '.mht',
  '.mid',
  '.midi',
  '.mj2',
  '.mka',
  '.mkv',
  '.mmr',
  '.mng',
  '.mobi',
  '.mov',
  '.movie',
  '.mp3',
  '.mp4',
  '.mp4a',
  '.mpeg',
  '.mpg',
  '.mpga',
  '.msi',
  '.mxu',
  '.nef',
  '.npx',
  '.npy',
  '.numbers',
  '.nupkg',
  '.o',
  '.odp',
  '.ods',
  '.odt',
  '.oga',
  '.ogg',
  '.ogv',
  '.otf',
  '.ott',
  '.pages',
  '.pbm',
  '.pbf',
  '.pcx',
  '.pdb',
  '.pdf',
  '.pea',
  '.pgm',
  '.pic',
  '.pkg',
  '.plist',
  '.png',
  '.pnm',
  '.pot',
  '.potm',
  '.potx',
  '.ppa',
  '.ppam',
  '.ppm',
  '.pps',
  '.ppsm',
  '.ppsx',
  '.ppt',
  '.pptm',
  '.pptx',
  '.psd',
  '.pxd',
  '.pxz',
  '.pya',
  '.pyc',
  '.pyo',
  '.pyv',
  '.qt',
  '.rar',
  '.ras',
  '.raw',
  '.resources',
  '.rgb',
  '.rip',
  '.riv',
  '.rlc',
  '.rmf',
  '.rmvb',
  '.rpm',
  '.rtf',
  '.rz',
  '.s3m',
  '.s7z',
  '.scpt',
  '.sgi',
  '.shar',
  '.snap',
  '.sil',
  '.sketch',
  '.slk',
  '.smv',
  '.snk',
  '.so',
  '.stl',
  '.suo',
  '.sub',
  '.swf',
  '.tar',
  '.tbz',
  '.tbz2',
  '.tga',
  '.tgz',
  '.thmx',
  '.tif',
  '.tiff',
  '.tlz',
  '.ttc',
  '.ttf',
  '.txz',
  '.udf',
  '.uvh',
  '.uvi',
  '.uvm',
  '.uvp',
  '.uvs',
  '.uvu',
  '.viv',
  '.vob',
  '.war',
  '.wav',
  '.wax',
  '.wbmp',
  '.wdp',
  '.weba',
  '.webm',
  '.webp',
  '.whl',
  '.wim',
  '.wm',
  '.wma',
  '.wmv',
  '.wmx',
  '.woff',
  '.woff2',
  '.wrm',
  '.wvx',
  '.xbm',
  '.xif',
  '.xla',
  '.xlam',
  '.xls',
  '.xlsb',
  '.xlsm',
  '.xlsx',
  '.xlt',
  '.xltm',
  '.xltx',
  '.xm',
  '.xmind',
  '.xpi',
  '.xpm',
  '.xwd',
  '.xz',
  '.z',
  '.zip',
  '.zipx',
]);

export function isBinaryPath(path: string): boolean {
  return binaryExtensions.has(extname(path).toLowerCase());
}
